package com.renbang.utils.quartz;  
  
import static org.quartz.JobBuilder.newJob;  
import static org.quartz.TriggerBuilder.newTrigger;  

import org.quartz.CronScheduleBuilder;
import org.quartz.JobDetail;  
import org.quartz.JobKey;
import org.quartz.Scheduler;  
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;  
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;

import com.renbang.model.art.ArtJian;
import com.renbang.model.crawl.TaskJob;
  
public class QuartzSchedule {  
	private static Scheduler scheduler = getScheduler();
	/**
	 * 
	 * @Description:定时器任务启动方法
	 * @author:user
	 * @param taskJob 定时器支持类
	 * @return void
	 * @date 2017年5月8日
	 */
    public void startJob(TaskJob taskJob) throws Exception {  
        //创建job
    	JobKey jobkey = new JobKey(taskJob.getJobName(), taskJob.getGropName());
        JobDetail job = newJob(HelloJob.class).withIdentity(jobkey).build();  
        
//        ArtJian word = new ArtJian();
//        word.setId(5); 
//        word.setContent("其实我也不知道");
//        word.setTitle("没有人知道");
//        job.getJobDataMap().put("Hellojob", word);
        
        TriggerKey triggerkey = new TriggerKey(taskJob.getTriggerName(), taskJob.getGropName());
        //创建一个触发器 
        Trigger trigger = newTrigger().withIdentity(triggerkey).withSchedule(
				CronScheduleBuilder
				.cronSchedule(taskJob.getCron())).build();
        //设置调度相关的Job  
        scheduler.scheduleJob(job, trigger);  
        //启动调度任务  
        scheduler.start();  
    }  
    /**
     * 
     * @Description:修改触发器方法
     * @author:user
     * @param QuartzScheduleMain.java
     * @return void
     * @date 2017年5月8日
     */
    public void modifyTrigger(TaskJob taskJob) throws Exception {  
    	System.out.println("修改时间为10秒");
    	 TriggerKey triggerkey = new TriggerKey(taskJob.getTriggerName(), taskJob.getCron());
        Trigger trigger = newTrigger()  
              .withIdentity(triggerkey).withSchedule(
				CronScheduleBuilder
				.cronSchedule(taskJob.getCron())).build();
        scheduler.resumeTrigger(trigger.getKey());//重启触发器
    } 
    
    /**
     * 
     * @Description:暂停任务方法
     * @author:user
     * @param jobName
     * @param group
     * @return void
     * @date 2017年5月8日
     */
    public void pauseJob(TaskJob taskJob) throws  Exception{
    	System.out.println("暂停任务");
    	JobKey jobkey = new JobKey(taskJob.getJobName(), taskJob.getGropName());
    	scheduler.pauseJob(jobkey); 
    }
   /**
    * 
    * @Description:重启任务
    * @param jobName
    * @param group
    * @return void
    * @date 2017年5月8日
    */
    public void resumeJob(TaskJob taskJob) throws  Exception{
    	System.out.println("重启任务");
    	JobKey jobkey = new JobKey(taskJob.getJobName(), taskJob.getGropName());
    	scheduler.resumeJob(jobkey); 
    }
    /**
     * 
     * @Description:移除任务
     * @param jobName
     * @param group
     * @param triggerName
     * @return void
     * @date 2017年5月8日
     */
    public void removeJob(TaskJob taskJob) throws  Exception{
    	System.out.println("删除任务");
    	JobKey jobkey = new JobKey(taskJob.getJobName(), taskJob.getGropName());
    	TriggerKey triggerKey = new TriggerKey(taskJob.getTriggerName(), taskJob.getGropName());
    	scheduler.pauseTrigger(triggerKey);//停止触发器  
    	scheduler.unscheduleJob(triggerKey);//移除触发器  
    	scheduler.deleteJob(jobkey); //删除任务  
    }
    /**
     * 
     * @Description:关闭调度器
     * @author:user
     * @return void
     * @date 2017年5月8日
     */
    public void shutdownScheduler() throws  Exception{
    	System.out.println("关闭调度");
    	scheduler.shutdown(true);
    }
    
    public static void main(String[] args) throws Exception {  
  
        QuartzSchedule example = new QuartzSchedule();  
        TaskJob taskJob = new TaskJob();
        taskJob.setJobName("job1");
        taskJob.setGropName("group1");
        taskJob.setTriggerName("trigger1");
        taskJob.setCron("0/3 * * * * ?");
        example.startJob(taskJob);
    }
    
    private static Scheduler getScheduler() {  
        SchedulerFactory sf = new StdSchedulerFactory();  
        Scheduler scheduler=null;  
        try {  
            scheduler = sf.getScheduler();  
        } catch (SchedulerException e) {  
            e.printStackTrace();  
        }  
        return scheduler;  
} 
    public static Scheduler getInstanceScheduler() {  
        return scheduler;  
}
  
}  